import re

from Unit.cot import get_completion

def reflection_code(code):
    prompt_content = (
        "考虑到原函数可能存在未知参数，即参数可能为自定义，因此计划使用反射去分析函数参数，并根据参数格式类型进行特异性变异，可参考下列反射代码。\n"
        '''public static T MutateWithReflection<T>(T obj)
        {
            var random = new Random();
            var type = typeof(T);
            var fields = type.GetFields();
        
            foreach (var field in fields)
            {
                if (random.NextDouble() < 0.2) // 20% 概率变异
                {
                    if (field.FieldType == typeof(int))
                    {
                        field.SetValue(obj, random.Next(0, 100)); // 替换为随机整数
                    }
                    else if (field.FieldType == typeof(string))
                    {
                        field.SetValue(obj, "MutatedString"); // 替换为随机字符串
                    }
                    // 可扩展支持更多类型
                }
            }
        
            return obj;
        }'''
        "请注意，只给出代码，不要解释。\n\n"
        f"{code}\n\n"
    )
    model_output = get_completion(prompt_content)
    pattern = r'```csharp\n(.*?)\n```'

    # 使用 re.findall 提取所有匹配的内容，并指定 re.DOTALL 以匹配多行
    csharp_code_blocks = re.findall(pattern, model_output, re.DOTALL)
    # print(csharp_code_blocks)
    return csharp_code_blocks[0]